package com.hlf.common.oss.fastdfs;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

/**
* Upload file by stream
* @author zhouzezhong & Happy Fish / YuQing
* @version Version 1.11
*/
public class UploadStream implements UploadCallback
{
    private InputStream inputStream; //input stream for reading
    private long fileSize = 0;  //size of the uploaded file

    /**
    * constructor
    * @param inputStream input stream for uploading
    * @param fileSize size of uploaded file
    */
    public UploadStream(InputStream inputStream, long fileSize)
    {
        super();
        this.inputStream = inputStream;
        this.fileSize = fileSize;
    }

    /**
    * send file content callback function, be called only once when the file uploaded
    * @param out output stream for writing file content
    * @return 0 success, return none zero(errno) if fail
    */
    public int send(OutputStream out) throws IOException
    {
        long remainBytes = fileSize;
        byte[] buff = new byte[256 * 1024];
        int bytes;
        while(remainBytes > 0)
        {
            try
            {
                if ((bytes=inputStream.read(buff, 0, remainBytes > buff.length ? buff.length : (int)remainBytes)) < 0)
                {
                    return -1;
                }
            }
            catch(IOException ex)
            {
                ex.printStackTrace();
                return -1;
            }

            out.write(buff, 0, bytes);
            remainBytes -= bytes;
        }

        return 0;
    }
}
